[アップデート] ECR プライベートレジストリのポリシースコープが更新され、複数のリポジトリポリシーを管理しなくてもよくなりました

[アップデート] ECR プライベートレジストリのポリシースコープが更新され、複数のリポジトリポリシーを管理しなくてもよくなりました

Clock Icon2024.12.27

いわさです。

今朝のアップデートで ECR のレジストリポリシーにポリシースコープの概念が追加され、新しいポリシースコープ V2 というものが使えるようになりました。

https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-ecr-expands-registry-policy-ecr-actions/

何が出来るようになったのかと、移行方法を紹介します。

用語の整理:レジストリとリポジトリ、ポリシー

まず、ECR にはレジストリとリポジトリの概念があり、混乱しがちなので整理しておきます。
レジストリは各 AWS アカウントに提供されるコンポーネントで、その中に 1 つ以上のリポジトリを作成できます。
リポジトリは Docker イメージ、OCI 互換イメージを保存出来るコレクションです。単一の ECR レジストリの中で複数のリポジトリを使用してコンテナイメージを整理出来ます。

このレジストリとリポジトリですが、どちらもリソースベースポリシーを設定することが出来ます。レジストリポリシーの場合は全てのリポジトリに自動適用されます。一方でリポジトリポリシーの場合は個別に設定が必要です。

このポリシーですが、クロスアカウントアクセスのシーンでよく設定が必要になります。
例えば次のようなことを行いたい場合は、リポジトリポリシーの追加が必要でした。

https://dev.classmethod.jp/articles/ecr-cross-account-replication-with-terraform/

これまでのレジストリポリシー

上記がなぜレジストリポリシーではなくリポジトリポリシーなのかというと、これまでのレジストリポリシーでは以下のアクションのみ許可出来るという制約がありました。

  • ecr:ReplicateImage
  • ecr:BatchImportUpstreamImage
  • ecr:CreateRepository

実際に上記以外のアクションを設定してみると次のようなエラーが発生します。

6B2E8F42-9706-4D86-B236-540FBA146357.png

そのため、これまでは特定のケースでは個別のリポジトリごとに追加設定が必要でした。

レジストリポリシーで全ての ECR アクションが設定出来るようになった

今回のアップデートで、このレジストリポリシーで上記以外の全ての ECR アクションが設定出来るようになりました。これによって個別にリポジトリポリシーの管理の手間がなくなります。
レジストリポリシーではリソース指定も出来るので、一元的にレジストリポリシーで管理することも出来るようになります。

この新しい機能を使うためにはレジストリのポリシースコープというものを V1 から V2 に更新してやる必要があります。

現在のポリシーの確認方法

新規のアカウントや初めて ECR レジストリポリシーを操作する環境の場合は既に V2 になっている場合があります。
確認方法ですが、次のようにプライベートレジストリの [Features & Settings] -> [Permissions] で「New registori policy scope available」のバナーが表示される場合はお使いの環境は V1 です。

23416E0C-568D-43BE-B053-7E8010091B17.png

あるいは、AWS CLI で確認も可能です。

% aws ecr get-account-setting --name REGISTRY_POLICY_SCOPE --profile hogeadmin
{
    "name": "REGISTRY_POLICY_SCOPE",
    "value": "V1"
}

V1 ポリシーの廃止は本日時点でアナウンスされていないので、このまま V1 を使うことも可能ですが、今回のアップデートで出来なくなったり既存環境に影響を受ける要素はないので、基本的には V2 に移行して良いです。

ポリシーを更新する

移行方法は非常に簡単でバナーの Enable ボタンを押せばすぐに更新されます。

F7F5F474-A142-4316-AA52-BEE2FE0F605D_4_5005_c.jpeg

8E8013C7-68CD-4974-AA38-77342B1C9234.png

あるいは AWS CLI から更新も可能です。(推奨はされていませんが、逆に V2 から V1 への更新も可能)

% aws ecr put-account-setting --name REGISTRY_POLICY_SCOPE --value V2 --profile hogeadmin
{
    "name": "REGISTRY_POLICY_SCOPE",
    "value": "V2"
}

更新後は次のように先ほどはエラーとなっていた(V1 で使えなかったアクションを含む)ポリシーの作成が可能になっています。

0904E3AC-45DB-4902-BFB8-85205A700ABF.png

さいごに

本日は ECR プライベートレジストリのポリシースコープが更新され、複数のリポジトリポリシーを管理しなくてもよくなったので実際に更新してみました。

更新の副作用もないので基本的に V2 に移行して良いのではないでしょうか。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.